package com.sqsxblog.hybrid.prompt;

import android.content.Context;
import android.webkit.JsPromptResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Toast;

import java.lang.reflect.Method;

public class PromptWebChromeClient extends WebChromeClient {

    private Context context;
    public PromptWebChromeClient(Context context)
    {
        this.context = context.getApplicationContext();
    }

    @Override
    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
        String[] split = message.split("\\|");
        Object params[] = new Object[split.length];
        params[0] = result;
        //数组下标0为方法名
        String anchor = split[0];
        //根据方法名反射方法
        Class cls[] = new Class[split.length];
        cls[0] = JsPromptResult.class;
        for(int i = 1; i < split.length; i++)
        {
            cls[i] = String.class;
            params[i] = split[i];
        }
        try {
            Method method;
            method = getClass().getMethod(anchor,cls);
            method.invoke(this,params);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //固定返回false，如果需要用prompt，就根据个人业务返回true
        return false;
    }

    //凡是可以让js调用的方法，首参数一定要提供JsPromptResult，便于提供返回值
    public void toast(JsPromptResult result,String text)
    {
        Toast.makeText(context,text,Toast.LENGTH_SHORT).show();
        result.confirm("返回值");
    }

    //由于没有提供JsPromptResult，因此这个是调用不了的
    public void toast()
    {
        Toast.makeText(context,"无参数toast",Toast.LENGTH_SHORT).show();
    }

}
